package com.chris.code.generate.android;

import com.chris.assist.builders.android.base.supports.AndroidApiBuildParams;
import com.chris.assist.builders.android.base.supports.AndroidBaseBuildManager;
import com.chris.assist.builders.android.base.supports.AndroidModelBuildParams;
import com.chris.assist.common.templates.AndroidTemplatePaths;
import com.chris.assist.common.templates.ResourceMode;
import com.chris.assist.config.Config;
import com.chris.assist.velocity.TemplateParam;
import com.chris.code.generate.manager.CustomFileResourceManager;
import com.chris.code.generate.manager.LocalTestConfigBuilder;

/**
 * @author Chris Chan
 * Create On 2025/9/26 下午2:50
 * Use for: Android数据类型和接口调用资源创建示例
 * Explain:
 * 使用默认模板
 * 使用自定义模板需要在Config中设置模式和模板路径
 */
public class AndroidBaseBuildTest {
    private static final String templateRootPath = "G:\\Dev\\products\\retro-products\\companies\\stone\\projects\\cup\\assist\\vtl";
    private static final String tablePrefix = "ofd_";
    private static final AndroidTemplatePaths templatePaths = CustomFileResourceManager.getAndroid();

    public static void main(String[] args) {
        // 1. 获取配置
        Config config = LocalTestConfigBuilder.create().get();
        // 2. 创建
        buildAllModels(config);
    }

    /**
     * 创建CreateParam参数资源
     * 构建参数在构建器中默认创建
     * 以下所有资源的创建都有自定义模式和默认模式
     *
     * @param config
     */
    private static void buildCreateParamsWithDefault(Config config) {
        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebCreateParams();
    }

    /**
     * 创建CreateParam参数资源
     *
     * @param config
     */
    private static void buildCreateParams(Config config) {
        AndroidModelBuildParams buildParams = AndroidModelBuildParams.create()
                .setPackageName("models.params.create")
                .setModelSuffix("CreateParam")
                .setModelTagSuffix("数据创建参数")
                .setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.models.createParam)
                );

        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebCreateParams(buildParams);
    }

    /**
     * 创建UpdateParam参数资源
     *
     * @param config
     */
    private static void buildUpdateParams(Config config) {
        AndroidModelBuildParams buildParams = AndroidModelBuildParams.create()
                .setPackageName("models.params.update")
                .setModelSuffix("UpdateParam")
                .setModelTagSuffix("数据更新参数")
                .setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.models.updateParam)
                );

        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebUpdateParams(buildParams);
    }

    /**
     * 创建SearchParam参数资源
     *
     * @param config
     */
    private static void buildSearchParams(Config config) {
        AndroidModelBuildParams buildParams = AndroidModelBuildParams.create()
                .setPackageName("models.params.search")
                .setModelSuffix("SearchParam")
                .setModelTagSuffix("数据查询参数").setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.models.searchParam)
                );

        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebSearchParams(buildParams);
    }

    /**
     * 创建OrderParam参数资源
     *
     * @param config
     */
    private static void buildOrderParams(Config config) {
        AndroidModelBuildParams buildParams = AndroidModelBuildParams.create()
                .setPackageName("models.params.order")
                .setModelSuffix("OrderParam")
                .setModelTagSuffix("数据排序参数").setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.models.orderParam)
                );

        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebOrderParams(buildParams);
    }

    /**
     * 创建Result结果资源
     *
     * @param config
     */
    private static void buildResults(Config config) {
        AndroidModelBuildParams buildParams = AndroidModelBuildParams.create()
                .setPackageName("models.result")
                .setModelSuffix("Result")
                .setModelTagSuffix("数据结果").setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.models.result)
                );

        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createWebResults(buildParams);
    }

    /**
     * 创建数据类型资源
     *
     * @param config
     */
    private static void buildModelsWithDefault(Config config) {
        AndroidBaseBuildManager.get(config).matchTableNamePrefixes(tablePrefix).createAllModels();
    }

    /**
     * 创建接口调用资源
     *
     * @param config
     */
    private static void buildApisWithDefault(Config config) {
        AndroidBaseBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createApis();
    }

    private static void buildApis(Config config) {
        AndroidApiBuildParams buildParams = AndroidApiBuildParams.create()
                .setPackageName("net.apis")
                .setModelSuffix("Api")
                .setModelTagSuffix("Http接口调用定义").setTemplateParam(
                        TemplateParam.of()
                                .setMode(ResourceMode.FILE)
                                .setRootPath(templateRootPath)
                                .setResourcePath(templatePaths.apis.apis)
                );

        AndroidBaseBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createApis(buildParams);
    }

    /**
     * 两者一起创建
     *
     * @param config
     */
    private static void buildAllWithDefault(Config config) {
        AndroidBaseBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createAllModels()
                .createApis();
    }

    private static void buildAllModels(Config config) {
        buildCreateParams(config);
        buildUpdateParams(config);
        buildSearchParams(config);
        buildOrderParams(config);
        buildResults(config);
    }

    private static void buildAll(Config config) {
        buildAllModels(config);
        buildApis(config);
    }
}
